k8s Job + Sidecar の悲しみ
2023/12/29
試すぞ〜と思ったけどまだ GKE Autopilot に 1.29 来てなかった
2023/12/21 相互リンク
2023/2/8 きたか
---.icon
ログコレクタや CloudSQL Proxy のような特に終了しないサイドカーを Job で使うと困る
コンテナのプロセスが終了したら Job が完了になるけど、Sidecar 側が終わらないのでずっと Job 実行したまま
メインのバッチタスクが終わったら Sidecar に伝えて死ぬようにする必要がある
共有ボリュームに touch completed とかして伝えるとか言ってて本気か?
普通のユースケースやろ
仕様提案
CloudSQL Proxy なら
PrivateIP でつなぐ(Proxy通さない)
DaemonSet でクラスタ内に共通の Proxy を立てる
etcetc
ファイルで伝えるやつ
code:trap-exit
args:
- |
trap "touch /tmp/pod/main-terminated" EXIT
run-job.sh
volumeMounts:
- mountPath: /tmp/pod
name: tmp-pod
Pod 内でプロセスの名前空間を共有するやつ
ファイル置くよりこっちのほうがいいんじゃない?
shareProcessNamespace: true
securityContext.capabilities.add に SYS_PTRACE 足してメインのプロセスから見えるようにして pgrep してシグナル送る
シグナル送る側のコンテナに securityContext を追加
sql_proxy_pid=$(pgrep cloud_sql_proxy) && kill -INT $sql_proxy_pid
ファイルで伝えるやつをツールにしたやつ
DaemonSet(Node単位でPodを起動する)で CloudSQLProxy 立てた場合に参照先とってくるテクとして
code:NODE_NAME
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
This KEP will not be progressing, Sig-node and others feel that this is not an incremental step in the right direction so they've gone back to the drawing board and will be coming up with some new KEPs that can hopefully solve all the use cases stated in this KEP as well as others.
1.18 で lifecycle: sidecar できるとか書いてた記事あったけど飛ばし記事じゃん
まじで2016年から状況変わってないのかこれ
2021/7/13